<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>declare</title>
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-base.css" />
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-medium.css" />

 </head>
 <body class="docs"><div class="navbar navbar-fixed-top">
  <div class="navbar-inner clearfix">
    <ul class="nav" style="width: 100%">
      <li style="float: left;"><a href="control-structures.match.html">« match</a></li>
      <li style="float: right;"><a href="function.return.html">return »</a></li>
    </ul>
  </div>
</div>
<div id="breadcrumbs" class="clearfix">
  <ul class="breadcrumbs-container">
    <li><a href="index.html">PHP Manual</a></li>
    <li><a href="language.control-structures.html">流程控制</a></li>
    <li>declare</li>
  </ul>
</div>
<div id="layout">
  <div id="layout-content"><div id="control-structures.declare" class="sect1">
 <h2 class="title">declare</h2>
 <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p>
 <p class="para">
  <code class="literal">declare</code> 结构用来设定一段代码的执行指令。<code class="literal">declare</code>
  的语法和其它流程控制结构相似：
  <div class="informalexample">
   <div class="example-contents">
<div class="cdata"><pre>
declare (directive)
    statement
</pre></div>
   </div>

  </div>
 </p>
 <p class="para">
  <code class="literal">directive</code> 部分允许设定 <code class="literal">declare</code>
  代码段的行为。目前只认识三个指令：<code class="literal">ticks</code>（更多信息见下面
  <a href="control-structures.declare.html#control-structures.declare.ticks" class="link">ticks</a> 指令）、
  <code class="literal">encoding</code>（更多信息见下面 <a href="control-structures.declare.html#control-structures.declare.encoding" class="link">encoding</a> 指令）、
 <code class="literal">strict_types</code> 指令 (更多信息见类型声明页面
     <a href="language.types.declarations.html#language.types.declarations.strict" class="link">严格类型</a>
   章节)。
 </p>
 <p class="para">
     因为本指令是在文件编译时处理的，所以指令只接受字面量的值。
     无法使用变量和常量。下面为你演示：
    <div class="informalexample">
        <div class="example-contents">
            <div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;这样是有效的：<br /></span><span style="color: #007700">declare(</span><span style="color: #0000BB">ticks</span><span style="color: #007700">=</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;这样是无效的：<br /></span><span style="color: #007700">const&nbsp;</span><span style="color: #0000BB">TICK_VALUE&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />declare(</span><span style="color: #0000BB">ticks</span><span style="color: #007700">=</span><span style="color: #0000BB">TICK_VALUE</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
        </div>

    </div>
 </p>
 <p class="para">
  <code class="literal">declare</code> 代码段中的 <code class="literal">statement</code>
  部分将被执行——怎样执行以及执行中有什么副作用出现取决于
  <code class="literal">directive</code> 中设定的指令。
 </p>
 <p class="para">
  <code class="literal">declare</code> 结构也可用于全局范围，影响到其后的所有代码（但如果有
  <code class="literal">declare</code> 结构的文件被其它文件包含，则对包含它的父文件不起作用）。
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;两者相等：<br /><br />//&nbsp;可以这样用：<br /></span><span style="color: #007700">declare(</span><span style="color: #0000BB">ticks</span><span style="color: #007700">=</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;这里写完整的脚本<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #FF8000">//&nbsp;也可以这样用：<br /></span><span style="color: #007700">declare(</span><span style="color: #0000BB">ticks</span><span style="color: #007700">=</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&nbsp;这里写完整的脚本<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>
 </p>
 
 <div class="sect2" id="control-structures.declare.ticks">
  <h3 class="title">Ticks</h3>
  <p class="para">
   Tick（时钟周期）是一个在 <code class="literal">declare</code> 代码段中解释器每执行
   <var class="varname">N</var> 条可计时的低级语句就会发生的事件。<var class="varname">N</var>
   的值是在 <code class="literal">declare</code> 中的 <code class="literal">directive</code> 部分用
   <code class="code">ticks=<var class="varname">N</var></code> 来指定的。
  </p>
  <p class="para">
   不是所有语句都可计时。通常条件表达式和参数表达式都不可计时。
  </p>
  <p class="para">
   在每个 tick 中出现的事件是由 <span class="function"><a href="function.register-tick-function.html" class="function">register_tick_function()</a></span>
   来指定的。更多细节见下面的例子。注意每个 tick 中可以出现多个事件。
  </p>
  <p class="para">
   <div class="example" id="example-136">
    <p><strong>示例 #1 Tick 的用法示例</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">declare(</span><span style="color: #0000BB">ticks</span><span style="color: #007700">=</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;每次&nbsp;tick&nbsp;事件都会调用该函数<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">tick_handler</span><span style="color: #007700">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">"tick_handler()&nbsp;called\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">register_tick_function</span><span style="color: #007700">(</span><span style="color: #DD0000">'tick_handler'</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;引起&nbsp;tick&nbsp;事件<br /><br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;引起&nbsp;tick&nbsp;事件<br /><br /></span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;引起&nbsp;tick&nbsp;事件<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">print(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;引起&nbsp;tick&nbsp;事件<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>
  </p>
  <p class="simpara">
   参见 <span class="function"><a href="function.register-tick-function.html" class="function">register_tick_function()</a></span> 和
   <span class="function"><a href="function.unregister-tick-function.html" class="function">unregister_tick_function()</a></span>。
  </p>
 </div>
 
 <div class="sect2" id="control-structures.declare.encoding">
  <h3 class="title">Encoding</h3>
  <p class="para">
   可以用 <code class="literal">encoding</code> 指令来对每段脚本指定其编码方式。
   <div class="example" id="example-137">
    <p><strong>示例 #2 对脚本指定编码方式</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">declare(</span><span style="color: #0000BB">encoding</span><span style="color: #007700">=</span><span style="color: #DD0000">'ISO-8859-1'</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&nbsp;在这里写代码<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

   </div>
  </p>
  
  <div class="caution"><strong class="caution">警告</strong>
   <p class="simpara">
    当和命名空间结合起来时 declare 的唯一合法语法是
    <code class="literal">declare(encoding=&#039;...&#039;);</code>，其中 <code class="literal">...</code>
    是编码的值。而 <code class="literal">declare(encoding=&#039;...&#039;) {}</code>
    将在与命名空间结合时产生解析错误。
   </p>
  </div>
  <p class="para">
   参见 <a href="ini.core.html#ini.zend.script-encoding" class="link">zend.script_encoding</a>。
  </p>
 </div>
</div></div></div></body></html>